//
//  Problem537.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/4/5.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 537. 复数乘法
 给定两个表示复数的字符串。

 返回表示它们乘积的字符串。注意，根据定义 i2 = -1 。

 示例 1:
     输入: "1+1i", "1+1i"
     输出: "0+2i"
     解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ，你需要将它转换为 0+2i 的形式。
 示例 2:
     输入: "1+-1i", "1+-1i"
     输出: "0+-2i"
     解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ，你需要将它转换为 0+-2i 的形式。
 注意:
     输入字符串不包含额外的空格。
     输入字符串将以 a+bi 的形式给出，其中整数 a 和 b 的范围均在 [-100, 100] 之间。输出也应当符合这种形式。
 */
@objcMembers class Problem537: NSObject {
    func solution() {
        print(complexNumberMultiply("15+-14i", "-21+-1i"))
        print(complexNumberMultiply("1+-1i", "1+-1i"))
        print(complexNumberMultiply("78+-76i", "-86+72i"))
    }
    
    /*
     -1548 + 5472
     */
    func complexNumberMultiply(_ a: String, _ b: String) -> String {
        var leftA: Int = 0
        var leftB: Int = 0
        var right: Bool = true
        
        var n: Int = 0
        for c in a {
            if c.isNumber {
                n = n * 10 + Int(c.asciiValue! - 48)
            } else if c == "-" {
                right = false
            } else if c == "+" {
                leftA = right == true ? n : -n
                n = 0
                right = true
            } else if c == "i" {
                leftB = right == true ? n : -n
                n = 0
                right = true
            }
        }
        
        
        var rightA: Int = 0
        var rightB: Int = 0
        for c in b {
            if c.isNumber {
                n = n * 10 + Int(c.asciiValue! - 48)
            } else if c == "-" {
                right = false
            } else if c == "+" {
                rightA = right == true ? n : -n
                n = 0
                right = true
            } else if c == "i" {
                rightB = right == true ? n : -n
                n = 0
                right = true
            }
        }
        
        
        print(leftA, leftB, rightA, rightB)
        return "\(leftA * rightA - leftB * rightB)+\(leftA * rightB + leftB * rightA)i"
    }
}
